package com.ysdz.tibetan.tibetanminicommons.generalService.impl;

import com.ysdz.tibetan.tibetanminicommons.generalDAO.GeneralDAO;
import com.ysdz.tibetan.tibetanminicommons.generalService.BaseService;
import org.apache.ibatis.exceptions.TooManyResultsException;
import org.springframework.beans.factory.annotation.Autowired;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.concurrent.locks.Condition;

public abstract class AbstractService<T> implements BaseService<T> {

//    @Autowired
//    protected abstract GeneralDAO<T> generalDAO;

//    private Class<T> modelClass;    // 当前泛型真实类型的Class
//
//    public AbstractService() {
//        // 获得具体 model，通过反射来根据属性条件查找数据
//        ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
//        modelClass = (Class<T>) pt.getActualTypeArguments()[0];
//    }
//
//    @Override
//    public void save(T model) {
//        generalDAO.insertSelective(model);
//    }
//
//    @Override
//    public void save(List<T> models) {
//        generalDAO.insertList(models);
//    }
//
//    @Override
//    public void deleteById(Integer id) {
//        generalDAO.deleteByPrimaryKey(id);
//    }
//
//    @Override
//    public void deleteByIds(String ids) {
//        generalDAO.deleteByIds(ids);
//    }
//
//    @Override
//    public void update(T model) {
//        generalDAO.updateByPrimaryKeySelective(model);
//    }
//
//    @Override
//    public T findById(Integer id) {
//        return generalDAO.selectByPrimaryKey(id);
//    }
//
//    @Override
//    public T findBy(String fieldName, Object value) {
//        T model = null;
//        try{
//            model = modelClass.newInstance();
//            Field field = modelClass.getDeclaredField(fieldName);
//            field.setAccessible(true);
//            field.set(model, value);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//        return generalDAO.selectOne(model);
//    }
//
//    @Override
//    public List<T> findByIds(String ids) {
//        return generalDAO.selectByIds(ids);
//    }
//
//    @Override
//    public List<T> findByCondition(Condition condition) {
//        return generalDAO.selectByCondition(condition);
//    }
//
//    @Override
//    public List<T> findAll() {
//        return generalDAO.selectAll();
//    }
}
